<?php
include dirname(__FILE__).'/../db_params.php';

class ComparadorHorario
{
	private $PENALIZACION_DIFERENCIA_CAMPUS = 7;
	private $modulos_entrada;
	private $modulos_salida;
	private $usuario;
	
	function __construct($usuario) 
    {
		$this->usuario = $usuario;
     	$this->modulos_entrada = array();
		$this->modulos_salida = array();
		
		foreach(array('L','M','W','J','V','S') as $dia)
		{
			$this->modulos_entrada[$dia] = $this->getPrimerModulo($this->usuario, $dia);
			$this->modulos_salida[$dia] = $this->getUltimoModulo($this->usuario, $dia);
		}
    }
	
	//retorna un int con el valor de diferencia
	function comprararByPrimerModulo($usuario)
	{
		$diferencia_total = 0;
		foreach(array('L','M','W','J','V','S') as $dia)
		{
			$modulo = $this->getPrimerModulo($usuario, $dia);
			
			if($this->modulos_entrada[$dia]['campus'] != $modulo['campus'])
			{
				$diferencia_total += $this->PENALIZACION_DIFERENCIA_CAMPUS;
			}
			else
			{
				$diferencia = $this->modulos_entrada[$dia]['numero'] - $modulo['numero'];
				$diferencia_total += abs($diferencia);
			}
		}
		
		return $diferencia_total;
	}
	
	function getPrimerModulo($usuario, $dia)
	{
		$query = "SELECT modulos.numero as numero, um.campus as campus FROM modulos, usuario_modulos um WHERE modulos.id = um.id_modulo 
				AND um.user_name = '$usuario' AND modulos.dia = '$dia' ORDER BY modulos.numero ASC LIMIT 1";
		$result = mysql_query($query);
		$row = mysql_fetch_array($result);
		
		return $row;
	}
	
	function compararByUltimoModulo($usuario)
	{
		$diferencia_total = 0;
		foreach(array('L','M','W','J','V','S') as $dia)
		{
			$modulo = $this->getUltimoModulo($usuario, $dia);
			
			if($this->modulos_salida[$dia]['campus'] != $modulo['campus'])
			{
				$diferencia_total += $this->PENALIZACION_DIFERENCIA_CAMPUS;
			}
			else
			{
				$diferencia = $this->modulos_salida[$dia]['numero'] - $modulo['numero'];
				$diferencia_total += abs($diferencia);
			}
		}
		
		return $diferencia_total;
	}
	
	function getUltimoModulo($usuario, $dia)
	{
		$query = "SELECT modulos.numero, um.campus FROM modulos, usuario_modulos um WHERE modulos.id = um.id_modulo 
				AND um.user_name = '$usuario' AND modulos.dia = '$dia' ORDER BY modulos.numero DESC LIMIT 1";
		$result = mysql_query($query);
		$row = mysql_fetch_array($result);
		
		return $row;
	}
	
	//retorna una la misma lista de usuarios orderanos por la similitud de horarios de entrada
	function sortUsuariosPorEntrada($usuarios)
	{
		$diferencias = array();
		foreach($usuarios as $usuario)
		{
			$diferencias[$usuario] = $this->comprararByPrimerModulo($usuario);
		}
		
		asort($diferencias);
		
		return $diferencias;
	}
	
	//retorna una la misma lista de usuarios orderanos por la similitud de horarios de salida
	function sortUsuariosPorSalida($usuarios)
	{
		$diferencias = array();
		foreach($usuarios as $usuario)
		{
			$diferencias[$usuario] = $this->comprararByUltimoModulo($usuario);
		}
		
		asort($diferencias);
		
		return $diferencias;
	}
	
	function sortUsuarios($usuarios)
	{
		$diferencias = array();
		
		foreach($usuarios as $usuario)
		{
			$diferencias[$usuario] = array(
				'entrada'	=> $this->comprararByPrimerModulo($usuario),
				'salida'	=> $this->compararByUltimoModulo($usuario)
			);
		}
		
		print($diferencias);
		echo "\n\n";
		
		$entrada = array();
		$salida = array();
		foreach($diferencias as $key => $value)
		{
			$entrada[$key] = $value['entrada'];
			$salida[$key] = $value['salida'];
		}
		
		array_multisort($entrada, SORT_ASC, $salida, SORT_ASC, $diferencias);
		
		return $diferencias;
	}
}
?>